Chargement des librairies

Attention select de mass (dépendance de mixOmics) prend le pas sur dplyr

Chargement des données brutes

Normalisation

Etapes de Standardisation des données

  • Données CPMG standardisation par la médiane et mise à l’échelle par la plage inter-quartile
tCPMG <- t(CPMG)
log2_tCPMG <- log2(tCPMG + 1e-8)
log2_CPMG <- log(CPMG + 1e-8)


###Standardisation par la médiane

stdr_medians <- apply(log2_tCPMG, 2, median)
series_median <- median(stdr_medians)

log2_CPMG_centered <- data.frame(matrix(
  nrow = nrow(log2_tCPMG),
  ncol = ncol(log2_tCPMG)))
colnames(log2_CPMG_centered) <- colnames(log2_tCPMG)
rownames(log2_CPMG_centered) <- rownames(log2_tCPMG)
for (j in 1:ncol(log2_tCPMG)) {
  log2_CPMG_centered[, j] <- log2_tCPMG[, j] - stdr_medians[j] + series_median
}

### Mise à l'échelle par la plage interquartile. Si sd ne change rien
sampleIQR <- apply(log2_CPMG_centered, 2, IQR)
seriesIQR <- median(sampleIQR)
scalingFactors <- sampleIQR / seriesIQR

CPMG_standard <- data.frame(matrix(
  nrow = nrow(log2_tCPMG),
  ncol = ncol(log2_tCPMG)))
colnames(CPMG_standard) <- colnames(log2_CPMG_centered)
rownames(CPMG_standard) <- rownames(log2_CPMG_centered)
for (j in 1:ncol(log2_CPMG_centered)) {
  CPMG_standard[, j] <- 
    (log2_tCPMG[, j] - stdr_medians[j] ) / scalingFactors[j] + series_median
}

par.ori <- par(no.readonly = TRUE)
par(mfrow = c(2, 2))
par(mar = c(5, 5, 2, 1))

#par(mar = c(5, 6, 4, 1)) ou 4 6 5 1

sample_size <- 30

## select sample indices
selected_samples <- sort(sample(
  x = 1:ncol(tCPMG), 
  size = sample_size,
  replace = FALSE))


boxplot(tCPMG[,selected_samples], 
        horizontal = TRUE,
        yaxt="n",
        las = 1, 
        main = "original values", 
        xlab = "value",
        ylab = "sample")


boxplot(log2_tCPMG[,selected_samples], 
        horizontal = TRUE, 
        yaxt="n",
        las = 1, 
        main = "log2-transformed", 
        xlab = "log2(value)",
        ylab = "sample")


boxplot(log2_CPMG_centered[,selected_samples], 
        horizontal = TRUE, 
        yaxt="n",
        las = 1,
        main = "Median-based centered", 
        xlab = "log2(value)",
        ylab = "sample")


boxplot(CPMG_standard[,selected_samples], 
        horizontal = TRUE, 
        las = 1,
        yaxt="n",
        main = "Standardized\n(median centering, IQR scaling)", 
        xlab = "log2(value)",
        ylab = "sample")

ACP via factominer

Poids des axes

Quand transformations uniquement en log2 Les 2 premiers axes expliquaient plus de 62% de la variance exprimée.
Désormais ils n’expliquent plus que 42% de la variance exprimée.

PCA issu du Package mixOmics

Juste pour montrer le code mais les résultats sont identiques. Remarque : Chaque axe est symétrique donc qu’un individu soit à-20ici et +20 avec factominer revient au même

Sparse PCA

Regarde si on peut observer naturellement une clusterisation en fonction d’une catégorie

Quelque soit la catégorie sexe, age tabac, nous n’observons aucune clusterisation.

Sparse PLS

Clusturisation

voir données NOESY

PLS-DA

Cercle de correlation PLS-DA

Ne sont représentés uniquement les buckets qui contribuent à au moins 50%

Contribution des variables PLS-DA

Les variables sélectionnées pour la composante 1 sont exprimées de manière positives pour le sexe1 et négative pour le sexe2. Pour le statut tabagique la composante est exclusivement négatives pour le statut non fumeur.